package cn.rulian.base.common.bo;

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;

/**
 * 实体基类
 */

/*
 * 标注为@MappedSuperclass的类将不是一个完整的实体类，他将不会映射到数据库表，但是他的属性都将映射到其子类的数据库字段中。
 * 标注为@MappedSuperclass的类不能再标注@Entity或@Table注解，也无需实现序列化接口。
 */
@MappedSuperclass
public class BaseBo
{

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id; // 主标识

	public Long getId()
	{
		return id;
	}


	/*
	 * 实体比较类
	 */
	@Override
	public boolean equals(Object obj)
	{
		if(this == obj)
		{
			return true;
		}
		if(this.id == null || obj == null || !(this.getClass().equals(obj.getClass())))
		{
			return false;
		}
		BaseBo that = (BaseBo) obj;
		return this.id.equals(that.getId());
	}

	/*
	 * 获取实体的hashCode
	 */
	@Override
	public int hashCode()
	{
		return id == null ? 0 : id.hashCode();
	}
}
